/*
 * 太原科技大学。
 * Copyright 2021, YCHS Information&Science Technology Co.,Ltd,
 * All rights reserved.
 */
package com.example.demo.controller;


import com.example.demo.Utils.HandleUtil;
import com.example.demo.Utils.VerifyUtil;
import com.example.demo.pojo.Result;
import com.example.demo.service.Code;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.OutputStream;

/**
 * @author liuchao
 * @version 1.0
 * @date 2024/9/12
 */
@Slf4j
@RestController
@RequestMapping("/code")
public class controller {

    @Autowired
    private Code Code;
    @Autowired
    HandleUtil handleUtil;

    //获取图形验证码接口
    @RequestMapping("/postPicCode")
    public void postPicCode(HttpServletRequest request, HttpServletResponse response) throws Exception{
        //请求头信息读取以及缓存在message数组中，第一项为User-Agent,第二项为请求IP,第三项为Phone
        String[] message;
        message= handleUtil.requestMessage(request);

        //生成验证码，生成的数组第一个是验证码，第二个是图片返回前端
        //这里作者（刘超）进行了调整，也可以使用默认，但是不太好识别
        //默认的代码Object[] objs = VerifyUtil.newBuilder().build().createImage();
        Object[] objs = VerifyUtil.newBuilder()
                .setWidth(120)   //设置图片的宽度
                .setHeight(35)   //设置图片的高度
                .setSize(6)      //设置字符的个数
                .setLines(10)    //设置干扰线的条数
                .setFontSize(25) //设置字体的大小
                .setTilt(true)   //设置是否需要倾斜
                .setBackgroundColor(Color.LIGHT_GRAY) //设置验证码的背景颜色
                .build()         //构建VerifyUtil项目
                .createImage();  //生成图片


        //调用service将生成的验证码缓存
        Code.setPicture(message,objs[0]);

        // 将图片输出给浏览器
        BufferedImage image = (BufferedImage) objs[1];
        response.setContentType("image/png");
        OutputStream os = response.getOutputStream();
        ImageIO.write(image, "png", os);

    }

    //短信验证码获取接口
    @PostMapping("/postPhoCode")
    public Result postPhoneCode(HttpServletRequest request){
        //请求头信息读取以及缓存在message数组中，第一项为User-Agent,第二项为请求IP,第三项为Phone
        String[] message;
        message= handleUtil.requestMessage(request);
        System.out.println(message[2]);

        //调用service将生成的验证码缓存
        //调用service将生成的验证码缓存
        if(Code.setPhone(message)){
            return Result.success();
        }else {
            return Result.error("发送失败，请重试");
        }
    }

    //验证码进行验证接口,如果是短信验证码需要在请求头中加上Phone这一请求头，图片的话不设置Phone请求头就好
    @GetMapping("/getCode")
    public Result putCode(HttpServletRequest request, String code){


        //请求头信息读取以及缓存在message数组中，第一项为User-Agent,第二项为请求IP,第三项为Phone
        String[] message;
        message= handleUtil.requestMessage(request);

        //将信息传给service进行验证并返回结果

        boolean tmp= Code.put(message,code);
        if(tmp){
            return Result.success();
        }else {
            return Result.error("验证码错误");
        }
    }

}
